package com.dongnam.quanly.common.util;

import java.text.DecimalFormat;
import java.util.Date;

import sun.misc.GC.LatencyRequest;

import com.dongnam.quanly.common.controller.ChungTuMoiNhatController;
import com.dongnam.quanly.common.model.ChungTuMoiNhat;
import com.dongnam.quanly.common.model.enumtype.LoaiID;
import com.dongnam.quanly.common.model.enumtype.LoaiDonHang;
import com.dongnam.quanly.common.model.enumtype.LoaiPhieu;

/**
 * Class này sẽ cung cấp chưng năng sinh tự động ID cho các đơn hàng, hóa đơn,
 * phiếu nhập xuất, thu chi ..vv
 * 
 * @author DangTanLoc
 * 
 */
public class CreateIDUtil {

	private static ChungTuMoiNhatController controller;

	public static ChungTuMoiNhatController getController() {
		if (controller == null)
			controller = new ChungTuMoiNhatController();
		return controller;
	}

	static public String customFormat(String pattern, double value) {
		DecimalFormat myFormatter = new DecimalFormat(pattern);
		return myFormatter.format(value);

	}

	static public String slitString(String source, String prefix) {
		return source.substring(prefix.length());
	}

	public static String createDonHangID(LoaiDonHang loaidonhang) {
		// create prefix

		String prefix = "";
		if (loaidonhang.equals(LoaiDonHang.MUA_HANG)) {
			prefix = "DH-MH";
		} else if (loaidonhang.equals(LoaiDonHang.BAN_HANG)) {
			prefix = "DH-BH";
		} else if (loaidonhang.equals(LoaiDonHang.DUNG_NOI_BO)) {
			prefix = "DH-NB";
		} else if (loaidonhang.equals(LoaiDonHang.CHUYEN_KHO)) {
			prefix = "DH-CK";
		}

		// Lấy ra số đơn hàng mới nhất trong database
		ChungTuMoiNhat lastid = getController().getById(LoaiID.SoDonHang, true);
		if (lastid == null) {
			lastid = new ChungTuMoiNhat();
			lastid.setLoaiChungTu(LoaiID.SoDonHang);
			lastid.setLastupdate(new Date());
			lastid.setValue(customFormat(prefix + "##########", 1));

		} else {
			String id = lastid.getValue();
			double result = Double.parseDouble(slitString(id, prefix));

			lastid.setLastupdate(new Date());
			lastid.setValue(customFormat(prefix + "##########", result + 1));
		}

		getController().makePersistent(lastid);
		return lastid.getValue();
	}

	public static String createPhieuNhapXuatID(LoaiPhieu loaiphieu) {
		String prefix = "";
		if (loaiphieu.equals(LoaiPhieu.PHIEU_NHAP)) {
			prefix = "PNK";
		} else if (loaiphieu.equals(LoaiPhieu.PHIEU_XUAT)) {
			prefix = "PXK";
		}

		// Lấy ra số phiếu nhập xuất mới nhất trong database
		ChungTuMoiNhat lastid = getController().getById(LoaiID.SoPhieuNhapXuat, true);
		if (lastid == null) {
			lastid = new ChungTuMoiNhat();
			lastid.setLoaiChungTu(LoaiID.SoPhieuNhapXuat);
			lastid.setLastupdate(new Date());
			lastid.setValue(customFormat(prefix + "##########", 1));

		} else {
			String id = lastid.getValue();
			double result = Double.parseDouble(slitString(id, prefix));

			lastid.setLastupdate(new Date());
			lastid.setValue(customFormat(prefix + "##########", result + 1));
		}

		getController().makePersistent(lastid);
		return lastid.getValue();
	}

	public static String createSerialNumber() {
		String prefix = "SN";// Serial Number

		// Lấy ra số phiếu nhập xuất mới nhất trong database
		ChungTuMoiNhat lastid = getController().getById(LoaiID.SerialNumber, true);
		if (lastid == null) {
			lastid = new ChungTuMoiNhat();
			lastid.setLoaiChungTu(LoaiID.SerialNumber);
			lastid.setLastupdate(new Date());
			lastid.setValue(customFormat(prefix + "##########", 1));

		} else {
			String id = lastid.getValue();
			double result = Double.parseDouble(slitString(id, prefix));

			lastid.setLastupdate(new Date());
			lastid.setValue(customFormat(prefix + "##########", result + 1));
		}

		getController().makePersistent(lastid);
		return lastid.getValue();
	}
}
